/*
topics模块负责关键字专题的CRUD，智能专题的获取以及关键字专题的异步刷新服务；

1,关键字专题管理

service是关键字专题管理相关的服务，service依赖Repository以及NumberService
提供如下功能：
	1.GetTopics获取全量的关键字列表，需要传入搜索配置
	2.UpdateTopic修改单个关键字专题
	3.DeleteTopic删除单个关键字专题
	4.CreateTopic创建单个关键字专题
	5.GetTopic根据id获取单个关键字专题
需要注意的是：
	1.在创建专题时需要自己生成唯一的id以及生成createTimestamp以及updateTimestamp
	2.在修改专题时时需要更新updateTimestamp
	3.创建或者修改专题时需要调用NumberService的GetNumber方法获取更新后的版本号并在redis中更新最新的版本号(redis中的topic_version++)，每个Topic对应一个版本号并存储在mysql中

2,智能专题服务是智能专题查询的服务
提供如下功能：
	1.Get获取全量的智能专题列表
	2.Length获取全量的智能专题总数
需要注意的是：
	1.目前认为智能专题是不可以修改的,并且仅暴露给外面名字，因此数据量并不大
	2.由于可能频繁的请求获取智能专题,且专题数据不变,因此将专题保存在配置文件中，在程序重启时读取并缓存到内存中

3,异步刷新服务是关键字专题对pipeline对接的全量启用专题的存储服务，需要将每次用户对关键字专题的修改同步到redis中，依赖UpgradeRepository、NumberService
设计思路：
	在redis中保存3个key，其中latest_version为redis中提供给pipeline使用最新版本号，值为数字是真实数据的key；比如：latest_version = 3,   3 = [{id:,name:},{id:,name:}]
topic_version是redis中同步的最新关键字专题的版本号，每次创建或修改专题时自增1。具体将topic_version同步到latest_version的方法是每隔30s通过NumberService获取topic_version的值
于latest_version进行比较，如果latest_version < topic_version将修改latest_version并查mysql将最新数据同步到redis；
	！！！需要注意的是，程序重启时需要读redis中的topic_version同步到NumberService初始化；需要读取latest_version同步到upgradeService初始化
提供如下功能：
	1.Loop每隔5秒进行一次刷新服务
	2.upgrade每次Loop的具体执行函数
需要注意的是：
	1.upgradeService初始化时读取mysql并将成员变量初始化为此版本号
	2.upgrade每次从NumberService中读取当前最新的版本号(key是topic_version)并与成员变量version进行比较，如果topic_version较大说明专题进行了更新
，则同步成员变量version为topic_version并将redis中的latest_version变更为topic_version并读取数据库中的全量topic更新到redis
*/

package topics